#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//typedef struct Node
//{
//    int data;
//    struct Node* next;
//}Node;
//
//Node* BuyNode(int n)
//{
//    Node* new = (Node*)malloc(sizeof(Node));
//    new->data = n;
//    return new;
//}
//
//Node* CreateCircle(int n)
//{
//    Node* ph = NULL, * pt = NULL;
//    ph = pt = BuyNode(1);
//    for (int i = 2; i <= n; i++)
//    {
//        pt->next = BuyNode(i);
//        pt = pt->next;
//    }
//    pt->next = ph;
//    return pt;
//}
//
//int select(int n)
//{
//    Node* prev = CreateCircle(n);
//    Node* pcur = prev->next;
//    int count = 1;
//    while (pcur->next != pcur)
//    {
//        if (count == 3)
//        {
//            prev->next = pcur->next;
//            free(pcur);
//            pcur = prev->next;
//            count = 1;
//        }
//        else
//        {
//            count++;
//            prev = pcur;
//            pcur = pcur->next;
//        }
//    }
//    return pcur->data;
//}
//
//int main()
//{
//    int n;
//    scanf("%d", &n);
//    int x = select(n);
//    printf("%d", x);
//}

int main()
{
    int n, k;
    char s[100][11], tmp[11];
    scanf("%d %d", &n, &k);
    for (int i = 0; i < n; i++)
        scanf("%s", s[i]);
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (strcmp(s[j], s[j + 1]) > 0)
            {
                strcpy(tmp, s[j]);
                strcpy(s[j], s[j + 1]);
                strcpy(s[j + 1], tmp);
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        printf("%s\n", s[i]);
    }
}